package com.waves.websocket.service;

import com.waves.websocket.domain.dto.WSAuthorize;
import com.waves.websocket.domain.vo.WSBaseVO;
import io.netty.channel.Channel;
import org.springframework.stereotype.Service;

/**
 * ws业务处理类
 */
@Service
public interface WebSocketService {
    /**
     * 处理用户登录请求，需要返回一张带code的二维码
     *
     * @param channel
     */
    void handleLoginReq(Channel channel);

    /**
     * 处理所有ws连接的事件
     *
     * @param channel
     */
    void connect(Channel channel);

    /**
     * 处理ws断开连接的事件
     *
     * @param channel
     */
    void removed(Channel channel);

    /**
     * 主动认证登录
     *
     * @param channel
     * @param wsAuthorize
     */
    void authorize(Channel channel, WSAuthorize wsAuthorize);

    /**
     * 扫码用户登录成功通知,清除本地Cache中的loginCode和channel的关系
     */
    Boolean scanLoginSuccess(Integer loginCode, Long uid);

    /**
     * 通知用户扫码成功
     *
     * @param loginCode
     */
    Boolean scanSuccess(Integer loginCode);

    /**
     * 推动消息给所有在线的人
     *
     * @param wsBaseResp 发送的消息体
     * @param skipUid    需要跳过的人
     */
    void sendToAllOnline(WSBaseVO<?> wsBaseResp, Long skipUid);


    /**
     * 发送给指定用户
     * @param wsBaseResp
     * @param uid
     */
    void sendToUid(WSBaseVO<?> wsBaseResp, Long uid);
}
